﻿using System;
using System.Collections.Generic;
using System.Web.Mvc;
using Dogshow.BusinessLogic.Managers;
using Dogshow.Model;
using Dogshow.Web.Infrastructure;
using Dogshow.Web.Models;
using Dogshow.Web.ViewModels.Korisnici;
using Korisnik = Dogshow.Model.Korisnik;

namespace Dogshow.Web.Controllers
{
    public class KorisniciController : DogshowController
    {
        private readonly KorisniciManager m_Manager;

        private readonly KinoloskaDrustvaManager m_KinoloskaDrustvaManager;

        public KorisniciController(KorisniciManager manager, KinoloskaDrustvaManager kinoloskaDrustvaManager)
        {
            m_Manager = manager;
            m_KinoloskaDrustvaManager = kinoloskaDrustvaManager;
        }

        public ActionResult Index()
        {
            var korisnici = m_Manager.VratiSveKorisnike();
            HttpContext.Application["Korisnici"] = korisnici;
            return View(new KorisnikViewModel{Korisnici = korisnici});
        }

        [HttpPost]
        public ActionResult SacuvajKorisnika(Korisnik korisnik)
        {
            if (ModelState.IsValid)
            {
                m_Manager.SacuvajPodatkeKorisnika(korisnik);
                return RedirectToAction("Index");
            }
            var viewModel = new KorisnikViewModel
            {
                Korisnik = korisnik,
                Korisnici = (IEnumerable<Korisnik>)HttpContext.Application["Korisnici"]
            };
            return View("Index", viewModel);
        }

        [HttpPost]
        public ActionResult SacuvajAdministratora(Administrator korisnik)
        {
            if (ModelState.IsValid)
            {
                m_Manager.SacuvajPodatkeKorisnika(korisnik);
                return RedirectToAction("Index");
            }
            var viewModel = new KorisnikViewModel
                                {
                                    Korisnik = korisnik, 
                                    Korisnici = (IEnumerable<Korisnik>)HttpContext.Application["Korisnici"]
                                };
            return View("Index", viewModel);
        }

        [HttpPost]
        public ActionResult SacuvajKorisnikaKinoloskoDrustvo(KorisnikKinoloskoDrustvo korisnik)
        {
            if (ModelState.IsValid)
            {
                m_Manager.SacuvajPodatkeKorisnika(korisnik);
                return RedirectToAction("Index");
            }
            var korisnici = HttpContext.Application["Korisnici"];
            var viewModel = new KorisnikViewModel
                                {
                                    Korisnik = korisnik, 
                                    KinoloskaDrustva = m_KinoloskaDrustvaManager.VratiSvaKinoloskaDrustva(), 
                                    Korisnici = (IEnumerable<Korisnik>)korisnici
                                };
            return View("Index", viewModel);
        }

        [HttpPost]
        public PartialViewResult ObrisiKorisnika(Korisnik korisnik)
        {
            m_Manager.ObrisiKorisnika(korisnik);
            var korisnici = m_Manager.VratiSveKorisnike();
            HttpContext.Application["Korisnici"] = korisnici;
            return KorisniciGridViewCallback();
        }

        public PartialViewResult KorisniciGridViewCallback()
        {
            var korisnici = HttpContext.Application["Korisnici"];
            return PartialView("KorisniciGrid", korisnici);
        }

        public PartialViewResult KorisnikCallback(int? idVrsteKorisnika, string korisnickoIme)
        {
            var model = new KorisnikViewModel(idVrsteKorisnika);
            if (korisnickoIme != "null")
            {
                var korisnik = m_Manager.VratiKorisnikaPoKorisnickomImenu(korisnickoIme);
                if (idVrsteKorisnika.HasValue && korisnik.VrstaKorisnika != idVrsteKorisnika)
                {
                    model.Korisnik.KorisnickoIme = korisnik.KorisnickoIme;
                    model.Korisnik.Naziv = korisnik.Naziv;
                    model.Korisnik.VidljivaLozinka = korisnik.VidljivaLozinka;
                    model.Korisnik.Email = korisnik.Email;
                    model.Korisnik.Aktivan = korisnik.Aktivan;
                } else
                {
                    model.Korisnik = korisnik;
                    idVrsteKorisnika = korisnik.VrstaKorisnika;
                }
            }
            
            if (idVrsteKorisnika == 3)
            {
                model.KinoloskaDrustva = m_KinoloskaDrustvaManager.VratiSvaKinoloskaDrustva();
            }
            return PartialView("_KorisnikCallbackPanel", model);
        }

        public ActionResult Detalji(string korisnickoIme)
        {
            var nalog = m_Manager.VratiKorisnikaPoKorisnickomImenu(korisnickoIme);
            return View(nalog);
        }


        [HttpPost]
        public ActionResult Detalji(Korisnik korisnik)
        {
            if (!ModelState.IsValid)
            {
                return View("Detalji", korisnik);
            }
            try
            {
                m_Manager.SacuvajPodatkeKorisnika(korisnik);
                DodajStatus(new UspenoSnimanje());
                return RedirectToAction("Detalji", new { korisnickoIme = korisnik.KorisnickoIme });
            }
            catch (Exception exc)
            {
                DodajStatus(new Greska(exc));
                return View("Detalji", korisnik);
            }
        }

    }
}
